有趣的题目,可爱的传送门:戳这呢= ̄ω ̄=
刚开始往概率 $\rm{DP}$ 想了,发现对于一个点的概率是好算,但是如果求贡献的话就会很难办。最后万般无赖的点开了题解,发现居然是……组合数学?其实和 $\rm{DP}$ 没有半毛钱关系。
我们考虑一个节点 $i$ ,我们枚举其子树大小 $j$ 。现在考虑最终有多少种合法的情况可以使得 $i$ 的子树大小恰好为 $j$ 。
易知节点数为 $n$ 的二叉树的总形态数为 $n!$ ,而且 $i$ 子树下的所有节点的编号一定要大于 $i$ ,我们考虑”先将 $i$ 子树构造出来再填入节点”的过程,子树的形态数显然为 $j!$ ,然后我们只能选剩下的 $n-i$ 个节点(编号要比 $i$ 大) ,填入剩下的 $j-1$ 个位置( $i$ 占了一个位置) ,显然这样的方案数为 $C_{n-i}^{j-1}$ 。
这样的一个 $i$ ,其子树大小为 $j$ ,那么它可以做出多少贡献呢?考虑 $fa_i \Rightarrow i$ 这条边会经过多少次,显然是 $j\cdot(n-j)$ 次( $j$ 为子树节点个数,$n-j$ 为上面的节点个数) ,也就是说这样的方案可以造成 $j\cdot (n-j)$ 的贡献。
那么现在 $i$ 的子树得到确定了,我们将 $i$ 以及其子树看做一个点,我们考虑 $1$ 到 $i$ 这些节点,它们可以以任意形态组成一棵树,方案数是 $i!$ 。
接着我们需要将剩下的 $n-j-(i-1)$ 个节点挂到树上去。对于第 $i$ 个挂到树上的点,它有 $i$ 个位置可以挂。但是因为 $i$ 一定要占一个位置,所以这个节点只有 $i-1$ 个位置可以挂了,第二个多出来的节点就有 $i$ 个位置可以挂……第 $k$ 个显然有 $i-2+k$ 个位置可以挂。也就是说这些点挂上去的总方案数为 $\prod\limits_{k=1}^{n-j-(i-1)} (i-2+k)$ 。
将上面的乘起来就是这一组 $i,j$ 对答案造成的贡献了:
$\prod\limits_{k=1}^{n-j-(i-1)} (i-2+k)$ 比较不好计算,但是简单的变化后发现这个是和 $(n-j-1)!/(i-2)!$ 等价的,我们带进原式子。
这样就很好算了,我们预处理组合数和阶乘,上面的式子 $O(1)$ 算~
代码很短。
Code:
1 |
|
本文标题:【题解】 [HAOI2018]苹果树 组合数学 loj2526
文章作者:Qiuly
发布时间:2019年05月05日 - 00:00
最后更新:2019年05月06日 - 13:23
原始链接:http://qiulyblog.github.io/2019/05/05/[题解]loj2526/
许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。